home *** CD-ROM | disk | FTP | other *** search
/ Internet.Works 41 / Issue 41.iso / pc / PCSoftware / Netscape 6 Official Release / nim.xpi / bin / chrome / aim.jar / content / aim / IM.js < prev    next >
Encoding:
Text File  |  2000-10-09  |  16.0 KB  |  625 lines

  1. var enterCR_pref_value = false;
  2. var args;
  3.  
  4. var sendAwayMessage = true;
  5.  
  6. function KnockKnockAddDenyList()
  7. {
  8.     val = cmdPeopleBlock();
  9.     if ( val == true )
  10.         window.close();
  11. }
  12.  
  13. function toggleKnockKnockPref()
  14. {
  15.     var element = document.getElementById("IMKnockKnockCheckbox");
  16.  
  17.     if (aimPrefsManager() && element.checked == true ) {
  18.         aimPrefsManager().SetBoolPref("aim.privacy.knockknock", false , null, false);
  19.     }
  20.     else if ( aimPrefsManager() && element ) {
  21.         aimPrefsManager().SetBoolPref("aim.privacy.knockknock", true , null, false);
  22.     }
  23. }
  24.  
  25. function pokeKnockKnockMessage( scname )
  26. {
  27.     var msg = aimString("knock.msg" );
  28.     var warning = aimString("knock.warning" );
  29.     var message = aimString("knock.preamble").replace(/%ScreenName%/, scname); 
  30.     var element = document.getElementById("IMKnockKnockHtml");
  31.     var textNode = document.createTextNode(message);
  32.     element.appendChild(textNode);
  33.  
  34.     element = document.getElementById("IMKnockKnockMessage");
  35.     textNode = document.createTextNode(msg);
  36.     element.appendChild(textNode);
  37.  
  38.     element = document.getElementById("IMKnockKnockWarningTitle");
  39.         element.setAttribute("value", scname);
  40.  
  41.     var locateManager = aimLocateManager();
  42.  
  43.     var LocateCallbackObject = new Object();
  44.  
  45.     LocateCallbackObject.OnRequestUserInfoDefaultComplete = function(screenname, userobj)
  46.     {
  47.         var element = document.getElementById("IMKnockKnockWarning");
  48.         var percent = userobj.GetWarningPercent();
  49.         var message = warning.replace(/%Level%/,  percent);        // XXX
  50.         var textNode = document.createTextNode(message);
  51.         element.appendChild(textNode);
  52.     }
  53.  
  54.     LocateCallbackObject.OnRequestUserInfoDefaultError = function(screenname, error)
  55.     {
  56.         // do nothing
  57.     }
  58.  
  59.     locateManager.RequestUserInfoDefault( LocateCallbackObject, scname );     
  60.  
  61.         labels = document.getElementById("okCancelButtons");
  62.         element = document.getElementById("ok");
  63.         element.setAttribute("value", labels.getAttribute("button1Label"));
  64.         element = document.getElementById("cancel");
  65.         element.setAttribute("value", labels.getAttribute("button2Label"));
  66.  
  67.     doSetOKCancel(StartConversation, CancelConversation);
  68.  
  69.     element = document.getElementById("IMKnockKnockCheckbox");
  70.  
  71.     var currentVal = aimPrefsManager().GetBoolPref("aim.privacy.knockknock" ,null,false);
  72.     if ( currentVal == true ) {
  73.             element.setAttribute("checked", false);
  74.     }
  75.     else {
  76.             element.setAttribute("checked", true);
  77.     }
  78. }
  79.  
  80. function aimPrivacyObject()
  81. {
  82.     return aimPrivacy();
  83. }
  84.  
  85. function aimWarningsObject()
  86. {
  87.     return aimWarnings();
  88. }
  89.  
  90. function aimSessionObject()
  91. {
  92.     return aimSession();
  93. }
  94.  
  95. function aimLocateObject()
  96. {
  97.     return aimLocateManager();
  98. }
  99.  
  100. function getEnums( myInterface )
  101. {
  102.         var enums = { };
  103.         for ( var i in myInterface ) {
  104.                 if ( typeof myInterface[i] == "number" ) {
  105.                         enums[i] = myInterface[i];
  106.                 }
  107.         }
  108.         return enums;
  109. }
  110.  
  111. // XXX Global to determine if our onload handler has been called yet.
  112. // For some reason, our onunload handler is getting called before onload
  113. // on the first time we create IM.xul. This is a workaround.
  114.  
  115. var gFirstTime = 1;
  116.  
  117. function AimIMOnWndLoad()
  118. {
  119. /** 
  120.  * AimIMOnWndLoad -- Onload handler for IM conversation window.
  121.  * 
  122.  * @author syd
  123.  * @return void
  124.  */ 
  125.     gFirstTime = 0;
  126.  
  127.     top.imObject = new Object();
  128.     top.imObject.logHasFocus = false;
  129.     top.imObject.editorHasFocus = false;   /* XXX */
  130.     top.imObject.screenNameHasFocus = false;
  131.     /**
  132.      * retrieve window arguments, extract IM mode and screen name
  133.      */
  134.  
  135.     args = aimGetArgs(top.arguments[0]);
  136.     dump("[Mode=" + args.Mode + "]\n");
  137.     dump("[ScreenName=" + args.ScreenName + "]\n");
  138.     top.document.getElementById("IMAttribs").setAttribute("imMode", args.Mode);
  139.  
  140.     var screenName;
  141.       if(args.ScreenName)
  142.              screenName= args.ScreenName;
  143.       else
  144.             screenName = "";
  145.  
  146.     /**
  147.      * if knock knock, let user approve it, also, check to see if we should
  148.      * autoreply, and do so if necessary
  149.      */
  150.  
  151.     var pPAimIM = aimPIMObject();
  152.     if ( args.Mode == "KnockKnock" ) {
  153.         if(pPAimIM) {
  154.             sendAwayMessage = false;
  155.             var curVal = aimPrefsManager().GetBoolPref("aim.away.autoreply", null, false);
  156.             if ( curVal == true )
  157.                 pPAimIM.SendAwayMessageMaybe(AimIMGetFormScreenName(), top, true);
  158.         }
  159.         pokeKnockKnockMessage( screenName ); 
  160.     /**
  161.      * we have to set this focus or ok/cancel buttons will not work
  162.      * with the key equivalents. lame
  163.      */
  164.  
  165.     setTimeout('window.focus()',300);
  166.         return;
  167.     }
  168.   else
  169.     doSetOKCancel(DoNothing, DoNothing);
  170.  
  171.     /**
  172.      * otherwise, do what we have always done
  173.      */
  174.  
  175.     StartConversation();
  176. }
  177.  
  178. function DoNothing()
  179. {
  180.   return false;
  181. }
  182.  
  183. function CancelConversation()
  184. {
  185.       args = aimGetArgs(top.arguments[0]);
  186.       var screenName;
  187.       if(args.ScreenName) {
  188.              screenName= args.ScreenName;
  189.         var session = aimSessionObject();
  190.         if ( session ) {
  191.             session.AddKnockKnockReject(screenName);
  192.         }
  193.     }
  194.     window.close();
  195. }
  196.  
  197. function StartConversation()
  198. {
  199.  doSetOKCancel(DoNothing, DoNothing);
  200.       args = aimGetArgs(top.arguments[0]);
  201.       var screenName;
  202.     var isKnockKnock = false;
  203.       if(args.ScreenName)
  204.              screenName= args.ScreenName;
  205.       else
  206.             screenName = "";
  207.  
  208.       if ( args.Mode == "KnockKnock" ) {
  209.         var session = aimSessionObject();
  210.         if ( session ) {
  211.             session.AddKnockKnockAccept(screenName);
  212.         }
  213.         args.Mode = "Bound";
  214.         isKnockKnock = true;
  215.         if ( AimOnlineAway())
  216.             ComeBack();        // return from away state if we are in it
  217.     }
  218.   
  219.     top.document.getElementById("IMAttribs").setAttribute("imMode", args.Mode);
  220.     top.imObject.logHasFocus = false;
  221.     //top.imObject.editorHasFocus = true;   /* XXX */
  222.  
  223.     var editorElement = document.getElementById("ComposeWnd");
  224.     if (!editorElement) {
  225.         dump("No editor element found\n");
  226.         return;
  227.     }
  228.     
  229.     var editorShell = editorElement.editorShell;
  230.     if (!editorShell) {
  231.         dump("No editorShell found\n");
  232.         return;
  233.     }
  234.  
  235.     if(editorShell) {            
  236.         // save the editorShell in the window. The editor JS expects to find it there.
  237.         window.editorShell = editorShell;
  238.  
  239.         window.editorShell.editorType = "html";
  240.  
  241.         window.editorShell.contentWindow = window._content;
  242.         window.editorShell.webShellWindow = window;
  243.         window.editorShell.LoadUrl("chrome://aim/content/blank.html");
  244.         EditorSharedStartup();
  245.     }
  246.  
  247.     top.document.getElementById("fldScreenName").value = screenName;
  248.  
  249.       // if we have a screen name, put the focus on the content window
  250.       // otherwise, put the focus in the "To:" field
  251.  
  252.     if(screenName != "") {
  253.         setTimeout('contentWindow.focus()',300);
  254.         top.imObject.editorHasFocus = true; 
  255.     }
  256.     else {
  257.         //setTimeout('top.document.getElementById("fldScreenName").focus()', 350);
  258.           setTimeout("DoFocusAdjust()",200);
  259.     }
  260.         
  261.   AimIMSetFormScreenName(screenName);
  262.   // XXX For some reason, we need to refresh the title after the
  263.   // onload handler or it won't change
  264.   setTimeout('AimIMRefreshScreenName()', 10);
  265.  
  266.   var timestampItem = top.document.getElementById("miTimestamp");
  267.  
  268.   var currentVal = aimPrefsManager().GetBoolPref("aim.general.im.timeStamp",null,false );
  269.   if ( currentVal == true )
  270.       timestampItem.setAttribute("value", aimString("miTimestamp.Hide"));
  271.   else
  272.       timestampItem.setAttribute("value", aimString("miTimestamp.Show"));
  273.  
  274.   // since we overlay the edit menu from the editorOverlay.xul file,
  275.   // we have to reset the oncommad to be AIM specific
  276.  
  277.   //var prefMenuItem = top.document.getElementById("menu_preferences");
  278.   //prefMenuItem.setAttribute("oncommand", "goPreferences('App.xul', 'chrome://communicator/content/pref/pref-IM_instantmessage.xul','instantmessenger');");
  279.  
  280.     var pPAimIM = aimPIMObject();
  281.     if(pPAimIM) {
  282.         pPAimIM.OnWindowLoad(screenName, top, sendAwayMessage);
  283.         if ( sendAwayMessage == true ) {
  284.             var curVal = aimPrefsManager().GetBoolPref("aim.away.autoreply", null, false);
  285.                 if ( curVal == true )
  286.                 pPAimIM.SendAwayMessageMaybe(AimIMGetFormScreenName(), top, false);
  287.             sendAwayMessage = false;
  288.         }
  289.     }
  290.   
  291.   return false;
  292. }
  293.  
  294. function DoFocusAdjust()
  295. {
  296.     var ScrElement=document.getElementById("fldScreenName");
  297.     if (top.imObject.screenNameHasFocus == false)
  298.         setTimeout("DoFocusAdjust()",100);
  299.     if (ScrElement.value == "")
  300.         {
  301.             ScrElement.focus();
  302.             top.imObject.screenNameHasFocus=true;
  303.             return;
  304.         }
  305.  
  306. }
  307. function AimIMOnWndUnload()
  308. {
  309.     dump("AimIMOnWndUnload\n");
  310.  
  311.         // XXX See note at the top of the file
  312.     if(gFirstTime == 1)
  313.         return;
  314.     
  315.     var screenName = AimIMGetFormScreenName();
  316.     var pPAimIM = aimPIMObject();
  317.     if(pPAimIM)
  318.         pPAimIM.OnWindowUnload(screenName, top);
  319. }
  320.  
  321. function AimIMCmdSend( strip )
  322. {
  323.     AimIMSetFormAction(true);
  324.     var screenName = AimIMGetFormScreenName();
  325.     if ( !screenName || screenName == "" ) {
  326.         aimErrorBox(aimString("msg.EmptyScreenName"));
  327.         top.document.getElementById("fldScreenName").focus();
  328.         return false;
  329.     }
  330.  
  331.   /*
  332.   if(false == aimBuddyIsOnline(screenName)) 
  333.   {
  334.     var errString;
  335.  
  336.     errString = aimString("msg.ScreenNameOffline").replace(/%ScreenName%/,  screenName);
  337.     aimErrorBox(errString);
  338.     top.document.getElementById("fldScreenName").focus();
  339.     return false;
  340.   }
  341.   */
  342.  
  343.     if(false == AimIMIsBound() ) {
  344.         // XXX Should be handled when blur works.
  345.         AimIMSetFormScreenName(top.document.getElementById("fldScreenName").value);
  346.         screenName = AimIMGetFormScreenName();
  347.  
  348.         if(aimIMDoesIMExist(screenName)) {
  349.             aimErrorBox(aimString("msg.DuplicateIM"));
  350.             AimIMSetFormAction(false);
  351.             return false;
  352.         }
  353.     }
  354.     
  355.  
  356.  
  357.     if (top.editorShell.documentLength >1024)
  358.     {
  359.         aimErrorBox(aimString("msg.BigIM").replace(/%BigBy%/, ""+(top.editorShell.documentLength-1024)));
  360.         return;
  361.     }
  362.     
  363.     var bodyText = "<html>" + top.editorShell.GetContentsAs("text/html", 8 + 4) + "</html>";
  364.     /* if user hit return, strip out the BR that was added */
  365.  
  366.     if ( strip == true ) {
  367.         bodyText = bodyText.replace(/<br>/gi, "");
  368.         bodyText = bodyText.replace(/\n/g, "");
  369.         bodyText = bodyText.replace(/\r/g, "");
  370.     }
  371.  
  372.     bodyText = bodyText.replace(/\n/g, "");
  373.     bodyText = bodyText.replace(/\r/g, "");
  374.     bodyText = bodyText.replace(/<br><br>/gi, "<br>");
  375.     bodyText = bodyText.replace(/<br><\/body>/i, "<\/body>");
  376.  
  377.     aimPIMSendIM(top, screenName, bodyText);
  378.  
  379.     if ( AimOnlineAway() )
  380.         ComeBack();        // if away, come back
  381.  
  382.     var session = aimSessionObject();
  383.     if ( session )
  384.         session.AddKnockKnockAccept( screenName );
  385.     top.editorShell.SelectAll();
  386.     top.editorShell.DeleteSelection(null);
  387.     //*** return focus to editor after clicking send ***
  388.     top._content.focus();
  389.     return true;
  390. }
  391.  
  392. function AimIMIsBound()
  393. {
  394.     var mode = AimIMGetFormMode();
  395.  
  396.     if("Bound" == mode)
  397.         return true;
  398.     return false;
  399. }
  400.  
  401. function AimIMUpdateWarningPercent()
  402. {
  403.     dump("called AimIMUpdateWarningPercent\n");
  404. }
  405.  
  406. //************ Form Accessors ****************
  407.  
  408. function AimIMGetFormMode()
  409. {
  410.     return top.document.getElementById("IMAttribs").getAttribute("imMode");
  411. }
  412.  
  413. function AimIMGetFormScreenName()
  414. {
  415.     //var myScreenName = top.document.getElementById("IMAttribs").getAttribute("imScreenName");
  416.      //if (!myScreenName || myScreenName == "") {
  417.          myScreenName = top.document.getElementById("fldScreenName").value;
  418.     //}
  419.  
  420.     return myScreenName;
  421. }
  422.  
  423. function AimIMRefreshScreenName()
  424. {
  425.   AimIMSetFormScreenName(top.document.getElementById('fldScreenName').value);
  426. }
  427.  
  428. function AimIMSetFormScreenName(screenName)
  429. {
  430.     var pPAimIM = aimPIMObject();
  431.     if(pPAimIM)
  432.         pPAimIM.OnWindowScreenNameChange(screenName, top);
  433.  
  434.   //dump("XXX Screen name = " + screenName + "\n");
  435.     var title;
  436.     if("" == screenName || !screenName)
  437.         title = aimString("im.title.Unbound");
  438.     else
  439.         title = aimString("im.title.Bound").replace(/%ScreenName%/, screenName);
  440.  
  441.     top.title = title;
  442. }
  443.  
  444. function AimIMSetFormAction(action)
  445. {
  446.     top.document.getElementById("IMAttribs").setAttribute("imAction", action);
  447. }
  448.  
  449. //***********  Window Resizing *****************
  450.  
  451. function AimIMWindowResize(sWidth,sHeight){
  452.     top.resizeTo(sWidth,sHeight)
  453. }
  454.  
  455.  
  456.  
  457. //************  Command Handling ****************
  458.  
  459. function cmdFileNewIM()
  460. {
  461.     dump("Implement Menu Command cmdFileNewIM()\n");
  462.     aimIMInvokeIMForm(null, null);
  463. }
  464.  
  465.  
  466.  
  467. function cmdEditCut()
  468. {
  469.     dump("Implement Menu Command cmdEditCut()\n");
  470.     if ( top.imObject.editorHasFocus == true  ) {
  471.         dump( "Focus window is edit wnd\n" );
  472.         EditorCut();
  473.     }
  474. }
  475.  
  476. function cmdEditCopy()
  477. {
  478.     dump("Implement Menu Command cmdEditCopy()\n");
  479.     if ( top.imObject.logHasFocus == true ) {
  480.         dump( "Focus window is log wnd\n" );
  481.     } 
  482.     else if ( top.imObject.editorHasFocus == true  ) {
  483.         dump( "Focus window is edit wnd\n" );
  484.         EditorCopy();
  485.     }
  486. }
  487.  
  488. function cmdEditPaste()
  489. {
  490.     dump("Implement Menu Command cmdEditPaste()\n");
  491.     if ( top.imObject.editorHasFocus == true  ) {
  492.         dump( "Focus window is edit wnd\n" );
  493.         EditorPaste();
  494.     }
  495. }
  496.  
  497. function cmdEditSelectAll()
  498. {
  499.     dump("Implement Menu Command cmdEditSelectAll()\n");
  500.     if ( top.imObject.logHasFocus == true ) {
  501.         dump( "Focus window is log wnd\n" );
  502.     } 
  503.     else if ( top.imObject.editorHasFocus == true  ) {
  504.         dump( "Focus window is edit wnd\n" );
  505.         EditorSelectAll();
  506.     }
  507. }
  508.  
  509. function cmdEditPreferences()
  510. {
  511.     dump("Implement Menu Command cmdEditPreferences()\n");
  512. }
  513.  
  514. function cmdViewToolbarsButtons()
  515. {
  516.     dump("Implement Menu Command cmdViewToolbarsButtons()\n");
  517. }
  518.  
  519. function cmdViewToolbarsCompose()
  520. {
  521.     dump("Implement Menu Command cmdViewToolbarsEditor()\n");
  522. }
  523.  
  524. function cmdViewTimestamp()
  525. {
  526.     var timestampItem = top.document.getElementById("miTimestamp");
  527.  
  528.         var currentVal = aimPrefsManager().GetBoolPref("aim.general.im.timeStamp" , null, false );
  529.         if ( currentVal == true ){
  530.                 aimPrefsManager().SetBoolPref("aim.general.im.timeStamp", false , null, false);
  531.         timestampItem.setAttribute("value", aimString("miTimestamp.Show"));
  532.         }
  533.         else {
  534.                 aimPrefsManager().SetBoolPref("aim.general.im.timeStamp", true , null, false);
  535.         timestampItem.setAttribute("value", aimString("miTimestamp.Hide"));
  536.         }
  537. }
  538.  
  539. function cmdAddressBook()
  540. {
  541.     var screenName = AimIMGetFormScreenName();
  542.  
  543.     var abCardURI = aimABInfo().GetABURI(screenName);
  544.  
  545.     var rdf = Components.classes["@mozilla.org/rdf/rdf-service;1"].getService();
  546.     rdf = rdf.QueryInterface(Components.interfaces.nsIRDFService);
  547.     var card = rdf.GetResource(abCardURI);
  548.     card = card.QueryInterface(Components.interfaces.nsIAbCard);
  549.  
  550.     goEditCardDialog("abdirectory://abook.mab", card, null);
  551. }
  552.  
  553. function cmdPeopleSendChatInvitation()
  554. {
  555.     dump("Implement Menu Command cmdPeopleSendChatInvitation()\n");
  556. }
  557.  
  558.  
  559.  
  560. function cmdPeopleBlock()
  561. {
  562.     var screenName = AimIMGetFormScreenName();
  563.     if ( !screenName ) {
  564.             if(args && args.ScreenName)
  565.                     screenName= args.ScreenName;
  566.         if( !screenName )
  567.             return false;
  568.     }
  569.     var pIAimPrivacy = aimPrivacyObject();
  570.     if ( !pIAimPrivacy )
  571.         return false;
  572.  
  573.     pIAimPrivacy.BlockUser( screenName );
  574.     return true;
  575. }
  576.  
  577. function cmdAddBuddy()
  578. {
  579.     openDialog("chrome://aim/content/BuddyAddBuddy.xul", "", "modal=yes,titlebar,chrome", null, null, AimIMGetFormScreenName());
  580. }
  581.  
  582. function cmdCmdWarn()
  583. {
  584.     dump("Implement Menu Command cmdCmdWarn()\n");
  585. }
  586.  
  587. /**** routines to track Focus */
  588.  
  589. function composeWndFocus(boolval)
  590. {
  591.     dump( "composeWndFocus" + boolval + "\n" );
  592.     if ( top.imObject )
  593.         top.imObject.editorHasFocus = boolval;
  594. }
  595.  
  596. function logWndFocus(boolval)
  597. {
  598.     dump( "logWndFocus" + boolval + "\n" );
  599.     if ( top.imObject )
  600.         top.imObject.logHasFocus = boolval;
  601. }
  602.  
  603. function AimIMFldScreenNameFocus(focus)
  604. {
  605.     if(false == focus)
  606.         AimIMSetFormScreenName(top.document.getElementById("fldScreenName").value);
  607. }
  608.  
  609. function SendOnEnter()
  610. {
  611.     // if enterCR_pref_value is true, the pref was set so that enter was a CR
  612.         // if enterCR_pref_value is false, the user wants enter to send the IM message
  613.     try {
  614.         pref = aimPrefsManager();
  615.         enterCR_pref_value = pref.GetBoolPref("aim.general.im.enterCR", null, false);
  616.     }
  617.     catch (ex) {
  618.         // default to be "send on enter key"
  619.         enterCR_pref_value = true;
  620.     }
  621.     
  622.     return (!enterCR_pref_value);
  623. }
  624.  
  625.